LinuC-1 - 102試験 - 1.09:重要なシステムサービス - 1.09.2 システムのログ

Last Update : August 21 2022 17:47:13

     

a. syslogの設定

syslogdによりシステムのログを管理できます。
多くのアプリケーションはsyslogdを利用してログを出力しています。
Linuxでは、主なログの出力先は/var/logディレクトリです。ディレクトリ内を確認すると分かりますが、ここには複数のファイルが存在します。この設定を行うファイルが/etc/syslog.confです。


1. syslogの設定

syslog.confの書式は、スペースあるいはタブで分けられた2つのフィールド「selector」と「action」で構成されています。
selector・・・取得するログの指定
action・・・取得したログの出力先
を指定します。

書式: selector action


a. セレクタ(selector)

selectorは「facility」と「priority」(label)を「.」(ピリオド)で接続します。特定のactionに対して複数のselectorを指定したい場合は、「;」(セミコロン)で接続します。

書式: facility.priority[;facility.priority]

【 ファシリティ(facility) 】

facilityはログの分類に当たるものです。syslogdを利用するプログラムは、「このログはこのfacilityに所属している」という情報をsyslogdに渡しています。syslogdの設定を行うことで、facilityに応じて扱い方を変更できます。

●facilityのオプション
 facility対象のログ
 auth(security)認証サービスのメッセージ(現在はauthprivが推奨されている)
 authpriv認証サービス(カテゴリはauthと同じ。authとは出力結果が異なる)
 croncronのメッセージ
 daemonデーモンのメッセージ
 kernカーネルのメッセージ
 lprプリンタサービスのメッセージ
 mailメールサービスのメッセージ
 newsニュースサービスのメッセージ
 syslogsyslogのメッセージ
 userユーザープロセスのメッセージ
 uucpuucp転送を行うプログラムのメッセージ
 local0~7アプリケーションに依存する

複数のfacilityを指定したい場合は「,」(カンマ)で接続して

mail,ftp.warn

【 プライオリティ(priority) 】

priorityは、プログラムが出力するメッセージのうち、ログのレベルの重要度を設定します。

●priorityのオプション
 priority内容
 debugデバッグ情報
 info情報
 notice通知
 warn警告
 err一般的なエラー
 crit致命的なエラー
 alert緊急に対処すべきエラー
 emergシステムが落ちるような状態

通常の設定を行うと、指定したpriority以上のログが出力されます。例えば、「err」を指定すればcrit、alert、emergのレベルの出力もされます。すなわち、重要度の低いpriorityを選択すればするほど、出力されるメッセージは多くなります。逆に、指定したpriorityよりも重要度の低いメッセージのみを出力させたい場合は、

mail.*;mail.!warn

のように記述します。この設定では、メールに関するメッセージのdebugとinfoとnoticeが出力されます(ここでの「*」はすべてのメッセージの意味)。  特定のpriorityのみを指定することも可能です。それには「=」を使用します。

kernel.=warn

のように記述すると、カーネルの警告メッセージだけが出力されます。これに「!」を合わせることで、特定のpriorityを除いたメッセージを出力することも可能です。  これらのpriorityの指定以外に、「none」を利用するとそのfacirityの出力を行いません。

kernel.=warn  <---facilityがkernelでpriorityがwarnのみ出力 mail.*;mail.!=crit  <---facilityがmailでpriorityがcrit以外のメッセージを出力 .;daemon.none  <---facilityがdaemon以外の全メッセージを出力

どのfacilityをどのpriorityにするかは、何を監視したいかによります。重要なデータを見逃さないように、必要なデータが取得できるpriorityに変更しましょう。


b. アクション(action)

actionには、selectorで指定したメッセージをどこに、あるいはどのように出力するかを設定します。具体的には、

  • どのファイルに出力するか(ファイルのパスを記述する)
  • ほかのプログラムに渡す(「|」を利用)
  • 他ホストに渡す(「@ホスト名」)
  • ユーザーのコンソールに表示(システムに登録されているユーザー名)

になります。また、出力先のファイルとして/dev/consoleを指定することで、コンソールに表示させることも可能です。actionの設定例は以下のとおりです。

/var/log/samplelog  <---/var/log/samplelogへログを出力 | /usr/local/bin/***  <---ログをパイプでほかのプログラムへ渡す /dev/console  <---ローカルのコンソールへ出力 @remotehost  <---リモートホストのsyslogdへ送信 root,user1  <---rootとuser1に通知 *  <---オンラインユーザーすべてに通知


b. ログのチェック

サーバのログを確認すれば、不正アクセスやサーバの状態、サービスの動作などを監視することができます。

デフォルトでは、/var/logディレクトリにさまざまなログファイルがあります。代表的な情報がどのファイルに出力されるのかを確認し、何に関する情報が必要であるかに応じて特定の単語を抜き出すファイルを指定します。

●ログが出力されるファイル
 ファイル名内容
 /var/log/messages一般的なシステムに関する情報
 /var/log/secureセキュリティに関する情報
 /var/log/boot.logOS起動時に関する情報
 /var/log/cron定期的に実行される処理の結果に関する情報
 /var/log/maillogメールに関する情報
 /var/log/spooler印刷やニュースに関する情報

c. ログファイルのローテーション

syslogdの設定を行いましたが、そのまま特定のログファイルに永遠にログを書き込んでいくわけにはいきません。なぜなら、ログファイルのデータが多くなればディスク容量を圧迫しますし、ログを確認しようとすると時間やCPUへの負担が大きくなるからです。これを回避するために、「logrotate」というプログラムを利用します。logrotateは指定されたタイミングでログファイルのバックアップを取り、新しいログファイルを作成してログのローテーションを行います。

logrotateの設定は、/etc/logrotate.confと/etc/logrotate.d ディレクトリにある各設定ファイルで行います。


1. logrotate.conf

 logrotate.confの内容は以下のとおりです。

weekly  <---毎週ファイルの置き換えを行う(monthly、dailyも指定可) rotate 4  <---4世代分のファイルを保存 create  <---ファイルの置き換え後、新しいログファイルを作成 #compress  <---圧縮するかどうか(デフォルトは圧縮しない #でコメント) include /etc/logrotate.d  <---各ログの詳細設定ファイルは/etc/logrotate.d /var/log/wtmp { <---wtmpログファイルは、毎月1世代のみファイルを置き換え、所有者がroot、 monthly 所有グループがutmpの新しいファイルを0664のパーミッションで作成する create 0664 root utmp   rotate 1   }

logrotate.confファイルは、logrotateのグローバルな設定を行います。例えば、1日のログのデータ量が非常に多い場合はweeklyではなくdailyに変更をすることで、1つのファイルのサイズを小さくできます。その場合、「rotate 4」では4日分しかログが残らないため、必要に応じて数字を大きくするなどの設定変更が必要です。


2. /etc/logrotated.d

各ログファイルの設定は、/etc/logrotated.dディレクトリの設定ファイルで行います。syslogdで設定されたログの設定ファイルは、/etc/logrotated.d/syslog になります。

/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron { <---最初の行にどのログファイルに関する設定かの記述 sharedscripts   <---複数のログファイルのローテーション後に、下の行の処理を1度だけ実行 postrotate   <---endscriptまでの処理をローテーション終了後に実行 /bin/kill -HUP 'cat /var/run/syslogd.pid 2> /dev/null ' 2> /dev/null || true   <---syslogdの動作中にファイルを移動すると、syslogdは出力すべきログファイルを見失ってしまうため、syslogdにHUPシグナルを送って設定を再読み込みさせている endscript   <---コマンドの終了 }

「グローバルの設定では毎週ローテーションだがsyslogdのログファイルのみ毎日」に変更したければ、この中括弧のpostrotateより上に「daily」と記述します。「missingok」と記述すると、対象のファイルが存在しなくてもエラーを出しません。「size 10M」と記述すると、ファイルサイズが10Mbytesを超えるローテーションを行うことも可能です。

logrotateはデーモンではなく、ここで設定した内容はcronによってlogrotateが起動されたときに読み込まれます。cronは/etc/crontabの内容に従い、/etc/cron.dailyディレクトリのsyslogを実行します。syslogファイルはlogrotateを起動するスクリプトになっており、設定ファイルに従って処理を行います。


z. 出題範囲概要

概要 :
  • rsyslogデーモンを設定できる。
    これには、ログ出力を中央のログサーバーに送信するようログデーモンを設定することが含まれる。
    または中央のログサーバーとしてログ出力を受け入れることも含まれる。
  • systemd のジャーナルサブシステムを使用できる。
  • ログのローテーション、圧縮、削除を自動化できる。

詳細 :
  • rsyslogデーモンを設定する。
    rsyslog.conf, rsyslogd
  • systemd のジャーナルの問い合わせ、フィルタ、削除する。
  • 標準的なファシリティ、優先度、およびアクションを理解する。
    logger, systemd-cat
    journalctl, /etc/systemd/journald.conf, /var/log/journal/
  • logrotateを設定する。
    logrotate, /etc/logrotate.conf, /etc/logrotate.d/, /var/log/

  [ 例題 ] 


         

    www.it-shikaku.jp